package org.csu.mypetstore.persistence;

import org.apache.ibatis.annotations.Param;
import org.csu.mypetstore.domain.CartItem;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;

@Repository
public interface CartMapper {

    void insertCartItem(@Param("userid") String userId,
                        @Param("itemid") String itemId,
                        @Param("productid") String productId,
                        @Param("instock")Boolean instock,
                        @Param("attribute1") String attribute1,
                        @Param("attribute2") String attribute2,
                        @Param("attribute3") String attribute3,
                        @Param("attribute4") String attribute4,
                        @Param("attribute5") String attribute5,
                        @Param("quantity") int quantity,
                        @Param("listprice") BigDecimal listprice,
                        @Param("total") BigDecimal total);

    List<CartItem> getCartItemListByUserid(String userid);

    List<CartItem> getCartItemListByUserName(String userid);

    void incrementQuantityByItemidAndUserid(@Param("userid")String userId,
                                            @Param("itemid")String itemId,
                                            @Param("quantity") int quantity,
                                            @Param("total") BigDecimal total);

    void removeItemByItemidAndUserid(@Param("userid") String userId, @Param("itemid") String itemId);

    void updateQuantityByItemidAndUserid(@Param("itemid") String itemId, @Param("userid") String userId, @Param("quantity") int quantity);

    void updateTotalByItemidAndUserid(@Param("itemid") String itemId, @Param("userid") String userId, @Param("total") BigDecimal total);

    void removeAllCartItemsByUserid(String userid);

    BigDecimal getListPriceByItemidAndUserid(@Param("userid") String userId, @Param("itemid") String itemId);

    int getQuantityByItemidAndUserid(@Param("userid") String userId, @Param("itemid") String itemId);
}